#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int *f1(void)
{  
	int x =10; 
	return(&x);

	// 它返回一个局部变量的指针，局部变量是保存在stack中的,退出函数后，
	// 局部变量就销毁了，保留其指针没有意义，因为其指向的stack空间可能被其他变量覆盖了
}

int *f2(void)
{  
	int *ptr; 
	
	*ptr =10;
	
	return ptr;

	// ptr是局部变量，未初始化，它的值是未知的，*ptr不知道指向哪里了，
	// 直接给*ptr赋值可能会覆盖重要的系统变量，这就是通常说的野指针的一种
}

int *f3(void)
{  
	int *ptr;  

	ptr = (int*) malloc(sizeof(int));  

	return ptr;
}


int main()
{
	int *pint;

	pint = f1();
	printf("%d\n", *pint);

	pint = f2();
	printf("%d\n", *pint);

	pint = f2();
	printf("0x%x\n", pint);
	free(pint);		// Segmentation fault (core dumped)
	//printf("0x%x\n", pint);

	return 0;
}

